export default {
	install(Vue, options) {
		// 正则匹配URL值
		Array.prototype.hasQueryString = (name) => {
			var reg = eval("/" + name + "/g");
			var r = window.location.search.substr(1);
			var flag = reg.test(r);
			if (flag) {
				return true;
			} else {
				return false;
			}
		}
		Array.prototype.getQueryString = (name) => {
			var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i");
			var r = window.location.search.substr(1).match(reg);
			if (r != null) return unescape(r[2]);
			return null;
		}

		// 判断数组中是否存在值
		Array.prototype.exists = (val) => {
			for (var i = 0; i < this.length; i++) {
				if (this[i] == val) {
					return true;
				}
			}
			return false;
		}

		/**
		 * 返回配置变量
		 */
		Vue.prototype.ENV = function() {
			return ENV
		};

		/**
		 * 返回osType
		 */
		Vue.prototype.osType = function() {
			return osType
		};

		/**
		* 判断横屏竖屏
		*/
		Vue.prototype.portrait = function() {
			return portrait
		};
		Vue.prototype.landscape = function() {
			return landscape
		};

		/**
		 * 返回上一页
		 */
		Vue.prototype.goBack = function() {
			return router.go(-1)
		};

		/**
		 * 判断用户是否登录
		 *
		 * @return  {Boolean}
		 */
		Vue.prototype.logined = function() {
			return !!sessionStorage.getItem('user')
		};

		/**
		 * 取用户信息
		 *
		 * @return  {Object}
		 */
		Vue.prototype.getUser = function() {
			return JSON.parse(sessionStorage.getItem('user'))
		};

		/**
		 * 控制台打印请求用
		 *
		 * @param   {Object}  response  输出的请求主体
		 */
		Vue.prototype.logResponse = function(response) {
			console.log('============')
			console.log('请求URL: ' + response.request.responseURL)
			console.log('返回Data: ')
			console.log(response.data)
			console.log('============')
		};

		/**
		 * 控制台打印请求错误用
		 *
		 * @param   {Object}  error  输出的错误请求主体
		 * @param   {Object}  alert  需要自定义弹窗提示的内容
		 */
		Vue.prototype.logError = function(error, alert) {
			console.log('============')
			console.log('请求数据: ')
			console.log(error.request)
			console.log('返回Error: ')
			console.log(error)
			console.log('返回Data: ')
			console.log(error.response)
			console.log('============')
			this.alertify.error(alert ? alert : '程序发生错误')
		};

		/**
		 * 控制台打印请求错误用
		 *
		 * @param   {Object}  error  输出的错误请求主体
		 * @param   {Object}  alert  需要自定义弹窗提示的内容
		 */
		Vue.prototype.alertError = function(obj) {
			this.alertify.error(obj.code)
			if (obj.msg) {
				this.alertify.error(obj.msg)
			}
		}

		/**
		 * 针对Hbuilder的打开新webview方法
		 *
		 * @param   {String}  url  需要打开的链接
		 */
		Vue.prototype.webviewNewOpen = function(url) {
			// 赋值外链页面并打开
			window.webviewNew = plus.webview.create(url, 'contendWebview', {
				navigationbar: {
					backgroundColor: '#FFF',
					titletText: 'Title',
					titleColor: '#9e9e9e'
				}
			});
			// 页面打开效果
			window.webviewNew.show('pop-in');

			// 检测外链页面关闭则清空其赋值
			window.webviewNew.addEventListener('close', function() {
				window.webviewNew = null;
			});
			// 外链页面导航条设定
			var bdata = '';
			var bitmap = new plus.nativeObj.Bitmap('back');
			bitmap.loadBase64Data(bdata, function() {
				bitmap.isLoadSuccess = true;
				console.log('返回箭头绘制成功');
			}, function(e) {
				console.log('返回箭头绘制失败: ' + JSON.stringify(e));
			});

			var nTitle = window.webviewNew.getTitleNView();
			nTitle.interceptTouchEvent(true); // 处理点击事件
			nTitle.addEventListener('click', function(e) {
				var touchX = e.pageX;
				if (touchX > 3 && touchX < 44) {
					window.webviewNew.close()
				}
			});
			nTitle.drawBitmap(bitmap, null, {
				top: '0px',
				left: '0px',
				width: '44px',
				height: '44px'
			}, 'backicon'); // 绘制返回箭头
		};

		/**
		 * 用于判定针对不同平台的打开连接方法
		 *
		 * @param   {String}  url  需要打开的链接
		 */
		Vue.prototype.openLink = function(url) {
			if (window.plus) {
				this.webviewNewOpen(url)
			} else {
				// window.location.href = url
				window.open(url, '_self', '');
				// ↓可以去除IOS底部返回控件的傻吊提案
				// window.location.replace(url);
			}
		};

		/**
		 * 播放音频
		 *
		 * @param   {String}   url  需要播放的链接
		 * @param   {String}   text  需要显示的文字
		 */
		Vue.prototype.playSound = {
			bot(url, text) {
				let Sound = document.getElementById('botSound')
				let botTextBox = document.querySelector('.tab.bot .text-box')
				let botText = document.querySelector('.tab.bot .text-box .text')
				let template = ENV.proxyurl + '/service/'
				if (url) {
					// 赋值音频链接
					Sound.src = template + url
					// 在能获取音频信息后的操作
					Sound.oncanplay = function() {
						// 替换及显示文字
						botText.innerHTML = text
						botTextBox.classList.add('m-show')
						botTextBox.classList.remove('m-hide')
						// 音频播放完毕后隐藏
						clearTimeout(timeout_botTextBox)
						timeout_botTextBox = setTimeout(() => {
							botTextBox.classList.add('m-hide')
							botTextBox.classList.remove('m-show')
						}, Sound.duration * 1000);
					}
				} else {
					// 替换及显示文字
					botText.innerHTML = text
					botTextBox.classList.add('m-show')
					botTextBox.classList.remove('m-hide')
					// 一定时间后隐藏
					clearTimeout(timeout_botTextBox)
					timeout_botTextBox = setTimeout(() => {
						botTextBox.classList.add('m-hide')
						botTextBox.classList.remove('m-show')
					}, 3600);
				}
			},
			se(url) {
				let Sound = document.getElementById('seSound')
				Sound.src = url
			}
		}
		/**
		 * 停止音频
		 */
		Vue.prototype.stopSound = {
			bot() {
				let botSound = document.getElementById('botSound')
				let botTextBox = document.querySelector('.tab.bot .text-box')
				// 暂停
				botSound.pause()
				// 后隐藏BOT文字框
				clearTimeout(timeout_botTextBox)
				botTextBox.classList.remove('m-show')
				botTextBox.classList.add('m-hide')
			},
			se() {
				let Sound = document.getElementById('seSound')
				Sound.pause()
			}
		}

		/**
		 * 调用意图识别模块后刷新商品内容
		 *
		 * @param   {String}   url  需要播放的链接
		 */
		Vue.prototype.intentService_talk = function(talk) {
			console.log(this.getUser());

			this.axios.post('intentService/talk', {
				openId: this.getUser().openid,
				src: "pc",
				record: "",
				talk: talk,
			}).then((response) => {
				if (response.data.code !== '200') {
					return this.alertError(response.data)
				}
				if (response.data.result.object) {
					console.log('意图识别', response.data.result.object);
					this.$root.eventHub.$emit('listGoods_pageLoad', response.data.result.object)
				}
			})
		}
		/**
		 * 安卓录音上传开始
		 */
		Vue.prototype.recordAndroidStart = function() {
			recordAndroid = plus.audio.getRecorder();
			if (recordAndroid == null) {
				ENV.PRODUCTION || console.log('录音对象未获取');
				return;
			}
			// 输出支持码率和格式
			ENV.PRODUCTION || console.log(recordAndroid.supportedSamplerates)
			ENV.PRODUCTION || console.log(recordAndroid.supportedFormats)
			// 定义录制格式和码率开始录音
			recordAndroid.record({
					filename: '_doc/audio/',
					samplerate: '16000',
					format: 'amr'
				}, (p) => {
					ENV.PRODUCTION || console.log('录音完成 | 上传音频文件：' + p);
					var task = plus.uploader.createUpload(ENV.proxyurl + '/voiceService/commonTrans', {}, (t, status) => {
						// 上传完成
						if (status == 200) {
							if (!ENV.PRODUCTION) {
								console.log('[翻译结果]')
								console.log(JSON.parse(t.responseText).result.text);
								console.log('[返回结果]')
								console.log(t.responseText);
								console.log('[上传数据的大小]');
								console.log(t.uploadedSize);
							}
							// 调用意图识别模块后刷新商品内容
							this.intentService_talk(JSON.parse(t.responseText).result.text)
						} else {
							alert("Upload failed: " + status);
						}
					});
					task.addFile(p, {
						key: "record"
					});
					task.start();
				},
				(e) => {
					if (!ENV.PRODUCTION) {
						console.log('录音失败：');
						console.log(e.message);
						console.log(JSON.stringify(e));
					}
				});
		};

		/**
		 * 安卓录音上传结束
		 */
		Vue.prototype.recordAndroidStop = function() {
			recordAndroid.stop();
			recordAndroid = null;
		}
	}
}
